/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Analisis;

import java.util.ArrayList;

/**
 *
 * @author asfeor
 */
/*
 * Клс обработки ввода, имеет несколько основных параметров для обработки возможности исключения
 * идея в том что бы спользуя флаги определить возможность исключения или ошибки ввода в 
 * строке. 
 */
public class Analis {
    //переменные отвечающие за запись директории маски и тд.
    public  String sDir,  sMask, sReg, sName, sDir_List_dir, sSort_type, sSort_vector, 
                    sCopy_path, sCopy_name, sRename_scr, sRename_new_name;
//флаг отвечающий за команду CD смены текущей директории   
    public boolean fCD=false, fCD_exit=false, fListSort=false, exeption=false, fDir=false, fFile=false,
                   fCopy=false, fDel=false, fFind=false, fDirList=false, fRename=false;
/** обработка введенной итерпритации строки, передается массив, который обрабатывается.
     * производим поиск ключей, и атрибутов. сопоставляем результаты и выдаем итоговый 
     * паблик, там осеновные параметры, они сделаны в стринге, но можно выдать булевый тип
     * для удобства заначения.
*/
  public boolean  sAnalis(String[] args){
   int i=0;
   while (args.length>i){
     Comands  com=new Comands();
      switch (com.coincidence(args[i])){
          case 0: { try{ if (com.coincidence(args[i+1])==-1) {
              this.fCD=true;
              this.sDir = args[i+1];              
              } } catch (NullPointerException ex) { exeption = true; this.fCD = false;}
              i++;     
          } break;
          case 1: { try { 
              if (com.coincidence(args[i+1])==-1) { 
                  this.sName=args[i+1]; 
                  this.fDir=true;
                                                                
          }
              
          } catch (NullPointerException ex) { exeption = true; }
          i++;
          } break;
          case 2: { try { 
              if (com.coincidence(args[i+1])==-1) {
                  sName=args[i+1];
                  fFile=true;
              }
              
          } catch (NullPointerException ex) { exeption = true;}
          i++;
          } break;
          case 3: { try { 
              if (com.coincidence(args[i+1])==-1) {
                  sCopy_name=args[i+1]; 
                  sCopy_path=args[i+2];
                  fCopy=true;
                  i++;
              }
              
          } catch (NullPointerException ex) { exeption = true;}
          i++;
          } break;
          case 4: {try { 
              if (com.coincidence(args[i+1])==-1) {
                  sName=args[i+1];
                  fDel=true;
              }
              
          } catch (NullPointerException ex) { exeption = true;}
          i++;
          
          } break;
          case 5: {try { 
              if (com.coincidence(args[i+1])==-1) {
                  sRename_scr=args[i+1];
                  sRename_new_name=args[i+2];
                  fRename=true;
              }
              
          } catch (NullPointerException ex) { exeption = true;}
          i++;
          
          } break;
          case 6: {try { 
              if (com.coincidence(args[i+1])==-1) {
                  sSort_type=args[i+1];
                  sSort_vector=args[i+2];
                  fListSort=true;
              }
              
          } catch (NullPointerException ex) { exeption = true;}
          i++;
          
          } break;
          case 7: {try { 
              if (com.coincidence(args[i+1])==-1) {
                  sMask=args[i+1];
                  fFind=true;
              }
              
          } catch (NullPointerException ex) { exeption = true;}
          i++;
          
          } break;
          case 8: {fDirList=true; 
                if ((i<args.length)&&(com.coincidence(args[i+1])==-1)) {
                    sDir_List_dir=args[i+1];
                    i++;
                }
                    
                                    
          i++;
          
          } break;
          case 9:{fCD_exit=true; } break;
          default: i++; break;
      }
            
          
     
       i++;
   }
   
    
  return exeption;
  } 
  class Comands{
  /**
   * имеем 9 командных выражений, метод взвращает номер команды. по нему будем
   * ориентироваться на команду и присутствие атрибутов, а также верность ввода.
   * 
   * 
   */
      private ArrayList<String> command_list = new ArrayList<String>();
      private String[] comand_array={"-cd","-mkdir","-mkfile","-copy","-delete",
            "-rename","-sort","-find","-dir","exit"};
      
      int coincidence(String name){
          int i=0;
        while (comand_array.length>i){
            command_list.add(comand_array[i]);
            i++;
        }
        if (command_list.contains(name)) return command_list.indexOf(name);
        else return -1;
                   
      }
      
      
  }
  


} 
  
 

    

